package menu

import (
	"go-caipu/pkg/services/admin/sysapi"
	"go-caipu/pkg/services/dto"
)

type Menu struct {
	MenuId     int64           `json:"id,string"`
	MenuName   string          `json:"name"`
	Title      string          `json:"title"`
	Icon       string          `json:"icon"`
	Path       string          `json:"path"`
	Paths      string          `json:"paths"`
	MenuType   int             `json:"type"`
	Status     int             `json:"status"`
	Action     string          `json:"action"`
	Permission string          `json:"permission"`
	ParentId   int64           `json:"parentId,string"`
	NoCache    bool            `json:"isCache"`
	Redirect   string          `json:"redirect,omitempty"`
	Breadcrumb string          `json:"breadcrumb"`
	Component  string          `json:"component"`
	Sort       int             `json:"sort"`
	Visible    bool            `json:"isHidden"`
	IsFrame    bool            `json:"isExternal"`
	Apis       []string        `json:"apis"`
	SysApi     []sysapi.SysApi `json:"sysApi"`
	Auths      []string        `json:"-" gorm:"-"` //前端权限判断
	Children   []Menu          `json:"children,omitempty" gorm:"-"`
	dto.ControlBy
	CreatedAt        string `json:"createTime"`
	UpdatedAt        string `json:"updatedAt"`
	CreateUserString string `json:"createUserString"` //创建人
	UpdateUserString string `json:"updateUserString"` //更新人
}

// MainMenu 菜单导航
type MainMenu struct {
	MenuId     int64       `json:"id"`
	Title      string      `json:"title"`
	ParentId   int64       `json:"parentId"`
	Type       int         `json:"type"`
	Path       string      `json:"path"`
	Name       string      `json:"name"`
	Component  string      `json:"component,omitempty"`
	Redirect   string      `json:"redirect,omitempty"`
	Icon       string      `json:"icon"`
	IsExternal bool        `json:"isExternal"`
	Hidden     bool        `json:"isHidden"`
	IsCache    bool        `json:"isCache"` // 如果设置为true页面将不会被缓存
	Order      int         `json:"sort"`
	Children   []*MainMenu `json:"children,omitempty"`
	Status     int         `json:"status"`
}

type TreeSelect struct {
	Key      int64        `json:"key,string"`
	ParentId int64        `json:"parentId,string"`
	Sort     int          `json:"sort"`
	Title    string       `json:"title"`
	Children []TreeSelect `json:"children,omitempty"`
}

type GetMenuCommand struct {
	Id int64 `uri:"id,string"`
}

type RemoveMenuCommand struct {
	Ids []string `json:"ids"`
	Id  int64    `uri:"id,string"`
}

// 更新菜单权限
type UpdateMenuApiCommand struct {
	MenuId int64    `json:"-"`
	Apis   []string `json:"apis"`
	UserId int64    `json:"-"`
}
